package cn.com.idmy.auth.event;


import cn.com.idmy.auth.login.LoginState;

public interface Listener<ID> {
    /**
     * 每次登录时触发
     */
    void doLogin(LoginState<ID> state);

    /**
     * 每次注销时触发
     */
    void doLogout(ID id, String token);

    /**
     * 每次被踢下线时触发
     */
    void doKickOut(ID id, String token);

    /**
     * 每次被顶下线时触发
     */
    void doReplaced(ID id, String token);

    /**
     * 每次被封禁时触发
     */
    void doDisable(ID id, String service, int level, long disableTime);

    /**
     * 每次被解封时触发
     */
    void doUntieDisable(ID id, String service);

    /**
     * 每次打开二级认证时触发
     */
    void doOpenTwo(String token, String service, long safeTime);

    /**
     * 每次关闭二级认证时触发
     */
    void doCloseTwo(String token, String service);

    /**
     * 每次创建 SaSession 时触发
     */
    void doCreateSession(String id);

    /**
     * 每次注销 SaSession 时触发
     */
    void doDeleteSession(String id);

    /**
     * 每次 Token 续期时触发（注意：是 timeout 续期，而不是 active-timeout 续期）
     */
    void doRenewTimeout(String token, ID id, long timeout);

    /**
     * 全局组件载入
     *
     * @param componentName 组件名称
     * @param component     组件对象
     */
    default void doRegisterComponent(String componentName, Object component) {
    }

    /**
     * StpLogic 对象替换
     *
     * @param baseManager /
     */
    default void doSetAuthManager(Object baseManager) {
    }

    /**
     * 载入全局配置
     *
     * @param props /
     */
    default void doSetGlobalProps(Object props) {
    }
}
